package com.ccys.db.page;

import com.ccys.common.enums.CodeEnum;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;

/**
 * 分页工具
 */
public class PageUtils {
    /**
     * 强制分页
     *
     * @param request
     * @return
     */
    public static PageDto getForciblyPage(HttpServletRequest request) {
        PageDto pageDto = new PageDto();
        if (request == null) {
            pageDto.setPageNum(CodeEnum.PAGE_NUM.codeOf());
            pageDto.setPageSize(CodeEnum.PAGE_SIZE.codeOf());
            return pageDto;
        }
        String pageNum = request.getParameter("pageNum");
        pageDto.setPageNum(StringUtils.isBlank(pageNum) ? CodeEnum.PAGE_NUM.codeOf() : Integer.valueOf(pageNum));
        String pageSize = request.getParameter("pageSize");
        pageDto.setPageSize(StringUtils.isBlank(pageSize) ? CodeEnum.PAGE_SIZE.codeOf() : Integer.valueOf(pageSize));
        return pageDto;
    }

    /**
     * 强制偏移量分页
     *
     * @param request
     * @return
     */
    public static PageDto getForciblyOffsetPage(HttpServletRequest request) {
        PageDto pageDto = new PageDto();
        if (request == null) {
            pageDto.setOffset(CodeEnum.PAGE_OFFSET.codeOf());
            pageDto.setLimit(CodeEnum.PAGE_LIMIT.codeOf());
            return pageDto;
        }
        String offset = request.getParameter("offset");
        pageDto.setOffset(StringUtils.isBlank(offset) ? CodeEnum.PAGE_OFFSET.codeOf() : Integer.valueOf(offset));
        String limit = request.getParameter("limit");
        pageDto.setLimit(StringUtils.isBlank(limit) ? CodeEnum.PAGE_LIMIT.codeOf() : Integer.valueOf(limit));
        return pageDto;
    }

    /**
     * 分页
     *
     * @param request
     */
    public static void startPage(HttpServletRequest request) {
        if (StringUtils.isNotBlank(request.getParameter("offset"))) {
            PageDto pageDto = getForciblyOffsetPage(request);
            PageHelper.offsetPage(pageDto.getOffset(), pageDto.getLimit());
        } else {
            PageDto pageDto = getForciblyPage(request);
            PageHelper.startPage(pageDto.getPageNum(), pageDto.getPageSize());
        }
    }

}
